precision mediump float;

// 输入的纹理坐标和纹理采样器
varying vec2 vTextureCoord;
uniform sampler2D s_TextureMap;

// 龙卷风的中心位置（归一化屏幕坐标）
uniform vec2 u_TornadoCenter;

// 龙卷风的强度和半径
uniform float u_TornadoRadius;    // 龙卷风的作用半径
uniform float u_TornadoStrength;  // 旋转强度
uniform float u_Time;             // 时间，用于动态旋转变化

void main() {
    // 计算纹理坐标与龙卷风中心的方向向量
    vec2 direction = vTextureCoord - u_TornadoCenter;

    // 计算到中心的距离
    float distance = length(direction);

    // 如果在龙卷风影响半径内，则进行扭曲
    if (distance < u_TornadoRadius) {
        // 距离越近，旋转越强，距离越远，旋转越弱
        float effectStrength = (u_TornadoRadius - distance) / u_TornadoRadius;

        // 计算旋转角度，角度随时间变化，产生动态旋风效果
        float angle = u_TornadoStrength * effectStrength;

        // 应用旋转
        float sinAngle = sin(angle);
        float cosAngle = cos(angle);

        // 旋转纹理坐标
        vec2 rotatedTexCoord = vec2(
            cosAngle * direction.x - sinAngle * direction.y,
            sinAngle * direction.x + cosAngle * direction.y
        );

        // 恢复旋转后的纹理坐标
        vec2 finalCoord = u_TornadoCenter + rotatedTexCoord;

        // 采样旋转后的纹理坐标
        gl_FragColor = texture2D(s_TextureMap, finalCoord);
    } else {
        // 如果在龙卷风半径外，保持原始纹理
        gl_FragColor = texture2D(s_TextureMap, vTextureCoord);
    }
}
